Skip to content

Node.js 多版本管理:nvm、n 与 Volta ​

同一个开发机上,不同项目对 Node.js 版本的要求经常不一致:老项目锁着 18,新工具链(例如较新版本的 VitePress)已经要求 22 以上。本文对比三种主流的 Node.js 版本管理器——nvm、n 与 Volta,覆盖安装方式、常用命令与选型建议,读完可以按自己的使用习惯选定一个并完成配置。

nvm:功能最全的事实标准 ​

nvm(Node Version Manager)是最流行的版本管理工具,通过 shell 函数拦截 node 命令实现版本切换。

安装 ​

Linux / macOS:

bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 或
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

# 加载 nvm
source ~/.bashrc   # zsh 用户执行 source ~/.zshrc

Windows 需要改用移植版 nvm-windows:下载 nvm-setup.exe 安装,之后在管理员权限的 PowerShell 或 CMD 中使用。

常用命令 ​

bash
nvm list-remote          # 列出所有可安装的版本(Windows 为 nvm list available)
nvm install --lts        # 安装最新 LTS 版本
nvm install 22           # 安装指定大版本
nvm install 18.19.0      # 安装指定完整版本
nvm list                 # 列出已安装的版本
nvm use 22               # 切换版本(仅当前 shell 生效)
nvm alias default 22     # 设置默认版本
nvm current              # 查看当前版本
nvm exec 22 node -v      # 在指定版本下执行命令
nvm uninstall 16         # 卸载版本

项目级版本锁定 ​

在项目根目录放一个 .nvmrc,内容只写版本号:

text
22

进入项目目录后执行 nvm use 会自动读取它切到对应版本,nvm install 则安装缺失的版本。团队协作时把这个文件提交进仓库,所有人都能对齐版本。

n:最简单的选择 ​

n 是一个极简的版本管理器,安装与切换都是一条命令,代价是需要先有一个可用的 Node.js(或用脚本安装)。

bash
# 安装 n(方式一:已有 Node.js 时)
sudo npm install -g n

# 安装 n(方式二:官方脚本)
curl -L https://bit.ly/n-install | bash

常用命令:

bash
sudo n lts           # 安装最新 LTS
sudo n latest         # 安装最新版
sudo n 22             # 安装指定版本
n list                # 列出已安装版本
sudo n                # 交互式选择版本
sudo n rm 16.0.0      # 删除指定版本
sudo n prune          # 删除除当前版本外的所有版本

n 通过替换全局的 node 二进制实现切换,系统级生效、无需 shell 集成,但一次只能有一个「当前版本」,没有按项目自动切换的能力。

Volta:按项目自动切换 ​

Volta 把版本管理做成了工具链层面的能力:进入项目目录时自动切换到该项目固定的 Node.js 与包管理器版本,无需手动操作。

bash
# Linux / macOS 安装
curl https://get.volta.sh | bash

# Windows 从官网下载安装程序
# https://docs.volta.sh/guide/getting-started

常用命令:

bash
volta install node@22      # 安装某个版本并设为默认
volta install node@lts     # 安装最新 LTS 并设为默认
volta pin node@22          # 把当前项目的 Node 版本固定为 22
volta install npm@10       # 安装并固定 npm 版本
volta pin npm@10           # 固定当前项目的 npm
volta list                 # 列出已安装的工具

volta pin 会把版本写进项目 package.json 的 volta 字段,提交后团队成员用 Volta 时自动获得相同工具链。它的优势就是省心:不依赖 shell 集成,切换无感,代价是概念比 nvm 多一层(默认工具链与项目固定)。

三者对比与选型 ​

特性 nvm n Volta
安装难度 低 极低 低
切换方式 shell 内切换,需手动或配 shell 集成 替换全局二进制,系统级 进入目录自动切换
项目级固定 .nvmrc(需手动 nvm use) 不支持 volta pin 写入 package.json,自动生效
跨平台 Linux/macOS(Windows 用 nvm-windows) Linux/macOS Linux/macOS/Windows
社区生态 最大 中等 较小但增长中

选型建议:

  • 日常使用选 nvm:功能完善、资料最多,.nvmrc 已经能覆盖多数场景;
  • 追求无感切换选 Volta:多项目频繁切换时自动固定版本的价值最大;
  • 只想快速装个版本、不在乎自动切换,选 n:命令最少,上手最快。

小结 ​

版本管理器解决的是「一台机器多个 Node.js 共存与对齐」的问题:nvm 靠 shell 切换加 .nvmrc 锁定,n 用全局替换换简单,Volta 用工具链固定换无感。三者取一即可,不建议混装。顺带一提,如果诉求不限于 Node.js——比如同一台机器上要管理 cmake、gcc 这类系统程序的多版本——Debian 系还提供 update-alternatives 这类系统级方案,思路相通,粒度不同。

最近更新

基于 VitePress 构建